package com.bytz.modules.cms.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bytz.modules.cms.order.entity.Order;
import com.bytz.modules.cms.order.entity.OrderItem;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 莱宝CMS—订单管理-订单主表 服务类
 * </p>
 *
 * @author KyleWang
 * @since 2022-10-10
 */
public interface IOrderService extends IService<Order> {

    /**
     * 根据status获取订单
     */
    List<Order> getOrderByStatus(String status);

    /**
     * 上传ec材料，更改ec状态
     */
    Boolean submitEcAuditFile(Order order);

    /**
     * 根据经销商获取订单
     */
    List<Order> getByReseller(String resellerId);

    /**
     * 根据订单状态和经销商获取列表
     */
    List<Order> getByResellerAndStatus(String resellerId, Collection<String> status);

    /**
     * 更新预付的已付金额
     */
    void submitPrepay(String orderId, BigDecimal prepayAmount);

    /**
     * 提交尾款
     */
    void submitBalancePay(Order order, BigDecimal payAmount, List<OrderItem> orderItems);
    /**
     *  修改到货情况 注：只能修改待提交尾款的状态
     */
    void updateArrivalStatus(String arrivalStatus,String contractNumber);

    /**
     *  新增到货情况 注：只能更改产品排产中的状态
     */
    void updateArrivalStatusAndStatus(String orderId,String status,String arrivalStatus);

    /**
     * 获取需要om处理的订单
     */
    List<Order> getOMReminderOrder();

    /**
     * 标记为已发送提醒邮件
     */
    void setReminderFlagTrue(String id);

    /**
     * 保存e-chop生成的合同id，并更改订单状态为待盖章
     */
    boolean saveEChopId(String orderId, Long documentId, String status);

    /**
     * 获取付款超时的订单
     */
    List<Order> getPaymentOvertimeOrder();

    /**
     * 将订单标记为超时过期
     */
    void updateOrderExpired(String id);
}
